/*
 * fat.h
 *
 *  Created on: 19/11/2011
 *      Author: utn_so
 */

#ifndef FAT_H_
#define FAT_H_



#include "../estructuras.h"

int fatEntryValues(void * valor,int *cluster);


//El sistem area, es lo que ocupa la fat, sin contar la fdt (o contandola?)
int calcularSizeOfSystemArea(void);

//Le pasas el numero de cilindro y te devuelve en que sector comienza
int calcularLogicalSectorNumber(int CN);


//Devuelve en que sector comienza la fdt
int fdtStartSector(void);


int clusterInicialDeFat(void);
int sectorInicialDeFdt(void);


int cantidadTotalDeSectores(void);
int32_t cantidadTotalDeClusters(void);

int cargarFat(void);

t_list * listaClustersLibres(void);
int32_t extenderCluster(int32_t nCluster);


char * obtenerTablaFat(void);
int32_t reloadFat(void);

int32_t fdtEntryDePath(char * path,t_fdtCompleteEntry * fdtEntry,t_cache_archivo * entradaCache);

uint32_t recorrerHastaEncontrar(char * path, t_fdtCompleteEntry * entradaDelArchivo,uint32_t * nClusterPath);

char * nombreDeArchivoEnFdtEntry(t_fdtCompleteEntry * entrada,char * nombreArchivoEnFdt);

int32_t escribirFatEnDisco(void);
void escribirFat(void);
t_list * clusterConcatenadosDeCluster(int32_t nCluster);

t_list * listaDeClusters(t_list * clustersAPedir);

t_array * obtenerArrayPathDePath(char * path);

int32_t buscarFdtEntryEnCluster(t_fdtCompleteEntry * entradaArchivo,t_cluster * clusterABuscar,char * nombreArchivo);

int32_t longFdtEntry(t_fdtEntry * entrada);

int32_t buscarFdtEntryEnSector(t_sector * sectorRevisado,t_fdtCompleteEntry * entradaArchivo, char * nombreDeArchivo);

int32_t buscarFdtEntryEnBloque(t_bloque *bloqueARevisar,t_fdtCompleteEntry *entradaArchivo,char * nombreDeArchivo);

t_list * buscarFdtEntry(char * clusterData,int32_t opcion,char *pathABuscar,uint32_t * posicion );
int32_t fdtEntryDeArchivo(char *nombreDeArchivo, t_fdtCompleteEntry * entradaArchivo);

int32_t buscarFdtEntryEnRoot(char *nombreArchivo, t_fdtCompleteEntry * entradaArchivo);

char * fdtEntryNombreArchivo(char * entradaArchivoAnalizar);
t_list * buscarTodasLasFdtEntryEnBloque(t_bloque * bloque);
t_list * buscarTodasLasFdtEntryEnSector(t_sector * sector);
#endif /* FAT_H_ */
